﻿using Presentacion.Clases.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Seg.Logica;
using Seg.Entidades;
using Presentacion.Clases;

namespace Presentacion.Controllers.Mantenimiento
{
    public class PaisController : Base
    {
        //
        // GET: /Pais/

        public ActionResult Index()
        {
            Init(false);
            return View();
        }

        public JsonResult Insertar(Pais entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    PaisLogica servicio = new PaisLogica();
                    servicio.Insertar(entidad);
                    resultado.result = 1;
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GRABAR;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Insertar", ex);
            }

            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult ListarPaisJQUERY(string nombre, string anulado, string sidx, string sord, int page, int rows)
        {

            //List<Pais> lista = new List<Pais>();

            PaisLogica servicio = new PaisLogica();

            var Pais = servicio.Listar(nombre, anulado);

            var count = Pais.Count();
            int pageIndex = page - 1;
            int pageSize = rows;
            int totalRecords = count;
            int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

            var items = Pais.Skip(pageIndex * pageSize).Take(pageSize);

            var result = new
            {
                total = totalPages,
                page,
                records = count,
                rows = (
                    from item in items
                    select new
                    {
                        id = item.CodigoPais,
                        cell = new string[] { 
                            item.CodigoPais.ToString(),
                            item.Nombre,
                            Convert.ToString(item.Anulado == true ? "Inactivo" : "Activo")
                        }
                    }).ToArray()
            };
            return Json(result, JsonRequestBehavior.AllowGet);
        }
        public JsonResult Actualizar(Pais entidad)
        {

            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    PaisLogica servicio = new PaisLogica();
                    servicio.Actualizar(entidad);
                    resultado.result = 1;
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GRABAR;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Actualizar", ex);
            }


            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

        public JsonResult ObtenerPais(Pais entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    PaisLogica servicio = new PaisLogica();
                    DTOPais pais = new DTOPais();

                    var result = servicio.ObtenerPais(entidad.CodigoPais);

                    pais.CodigoPais = result.CodigoPais;
                    pais.Nombre = result.Nombre;
                    pais.Anulado = result.Anulado;

                    resultado.result = 1;
                    resultado.data = Json(pais, JsonRequestBehavior.AllowGet);
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ObtenerPais", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

        public JsonResult Eliminar(Pais entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if(!isLogout(ref resultado))
                {
                    PaisLogica servicio = new PaisLogica();
                    var result = servicio.Eliminar(entidad.CodigoPais);

                    if (result == 1)
                    {
                        resultado.result = 1;
                        resultado.message = Constante.MensajeGenerico.MSG_OK_ELIMINAR;
                    }
                    else
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_ELIMINAR;
                    }
                }
                
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Eliminar", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult ListarPais()
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    List<Pais> lst = new List<Pais>();
                    PaisLogica servicio = new PaisLogica();

                    lst = servicio.Listar("", "A");
                    List<Constante.SelectItems> items = new List<Constante.SelectItems>();

                    lst.ForEach(c =>
                    {
                        items.Add(new Constante.SelectItems
                        {
                            Valor = Convert.ToString(c.CodigoPais),
                            Descripcion = c.Nombre
                        });
                    });

                    resultado.result = 1;
                    resultado.data = Json(items, JsonRequestBehavior.AllowGet);
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GENERICO;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ListarPais", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }  
    }
}
